﻿using System;
using System.Web.Mvc;
using BoneSystem.Business.Entity.ItemComercial.ProdutoMercadoria;
using BoneSystem.Business.Entity.ItemComercial.ProdutoMercadoria.SubClass.Produto;
using BoneSystem.Business.Entity.Pedido.Venda.ClassesRelacionadas;
using BoneSystem.Business.Entity.Pessoa.SubClass.PessoaFisica;
using BoneSystem.Business.Entity.Pessoa.SubClass.PessoaJuridica;
using BoneSystem.Business.Entity.Produto;
using BoneSystem.Controllers;
using BoneSystem.Models;

namespace BoneSystem.Areas.Cliente.Controllers
{
    public class CarrinhoController : CadastroBaseController<Carrinho>
    {
        public const string SessionName = "sessionCarrinho";
        public JsonResult AddProduto(int idProduto)
        {
            return AddProduto(idProduto, 1);
        }
        public JsonResult AddProduto(int idProduto, decimal quantidade)
        {
            try
            {
                var login = User.Identity.Name;
                var carrinho = (Carrinho)Session[SessionName] ?? new Carrinho();
                if (!string.IsNullOrEmpty(login))
                {
                    var pessoaFisica = PessoaFisicaRepository.GetByCpf(login);
                    if (pessoaFisica != null)
                    {
                        carrinho = pessoaFisica.Carrinho;
                        Session[SessionName] = null;
                    }
                    else
                    {
                        var pessoaJuridica = PessoaJuridicaRepository.GetByCnpj(login);
                        if (pessoaJuridica != null)
                        {
                            carrinho = pessoaJuridica.Carrinho;
                            Session[SessionName] = null;
                        }
                    }

                }

                var produto = ProdutoRepository.GetById(idProduto);

                carrinho.PedidoCompraItens.Add(new CarrinhoItem()
                {
                    ItemComercial = produto,
                    Quantidade = quantidade
                });
                if (carrinho.Id != 0)
                {
                    CarrinhoRepository.Save(carrinho);
                }
                else
                {
                    Session[SessionName] = carrinho;
                }
            }
            catch (Exception ex)
            {
                return Json(JsonResultModel<Carrinho>.Fail(ex.Message));
            }
            
            return Json(JsonResultModel<Carrinho>.Sucess());
        }

        protected override Carrinho LoadReferences(Carrinho model)
        {
            return model;
        }
    }
}